/* Implementación del TDA Tablero */
#include <stdio.h>
#include <stdlib.h>
#include "../include/tablero.h"

Ttablero crearTablero(void)
{
	Ttablero tab=(Ttablero) malloc(sizeof(tablero));
	if(tab!=NULL)
	{
		char f, c;
		for(f=0;f<FILA;f++)
			for(c=0;c<COLUMNA;c++)
				*(*((tab->ranura)+f)+c)=crearRanura();
		tab->cantFichas=0;
	}
	return tab;
}

void destruirTablero(Ttablero tab)
{
	if(tab!=NULL)
		free(tab);
}

void vaciarTablero(Ttablero tab)
{
	if(tab!=NULL)
	{
		char f, c;
		for(f=0;f<FILA;f++)
			for(c=0;c<COLUMNA;c++)
				*(*((tab->ranura)+f)+c)=crearRanura();
		tab->cantFichas=0;
	}
}

void imprimirTablero(Ttablero tab)
{
	if(tab!=NULL)
	{
		char f, c;
		printf("_____________________________\n");
		printf("  1   2   3   4   5   6   7\n");
		for(f=0;f<FILA;f++)
		{
			for(c=0;c<COLUMNA;c++)
				printf("| %c ",tab->ranura[f][c]->ficha->color);
			printf("|\n");
		}
	}
}

char buscarLineaCuatro(Ttablero tab)
{
	char encontrado=0;
	if(tab!=NULL)
	{
		char f, c, k, cant=0, colorA, colorB;
		for(f=0;f<FILA;f++)
			for(c=0;c<COLUMNA-3;c++)
			{
				for(k=1;k<4;k++)
				{
					colorA=tab->ranura[f][c]->ficha->color;
					colorB=tab->ranura[f][c+k]->ficha->color;
					if((colorA!=' ')&&(colorA==colorB))
						cant++;
				}
				if(cant>=3)
				{
					encontrado=1;	break;	break;
				}
				else
					cant=0;
			}
		for(f=0;f<FILA-3;f++)
			for(c=0;c<COLUMNA;c++)
			{
				for(k=1;k<4;k++)
				{
					colorA=tab->ranura[f][c]->ficha->color;
					colorB=tab->ranura[f+k][c]->ficha->color;
					if((colorA!=' ')&&(colorA==colorB))
						cant++;
				}
				if(cant>=3)
				{
					encontrado=1;	break;	break;
				}
				else
					cant=0;
			}
		for(f=0;f<FILA-3;f++)
			for(c=3;c<COLUMNA;c++)
			{
				for(k=1;k<4;k++)
				{
					colorA=tab->ranura[f][c]->ficha->color;
					colorB=tab->ranura[f+k][c-k]->ficha->color;
					if((colorA!=' ')&&(colorA==colorB))
						cant++;
				}
				if(cant>=3)
				{
					encontrado=1;	break;	break;
				}
				else
					cant=0;
			}	
		for(f=0;f<FILA-3;f++)
			for(c=0;c<COLUMNA-3;c++)
			{
				for(k=1;k<4;k++)
				{
					colorA=tab->ranura[f][c]->ficha->color;
					colorB=tab->ranura[f+k][c+k]->ficha->color;
					if((colorA!=' ')&&(colorA==colorB))
						cant++;
				}
				if(cant>=3)
				{
					encontrado=1;	break;	break;
				}
				else
					cant=0;
			}
	}
	return encontrado;
}

char cargarTablero(Ttablero tab, char color,char c)
{
	char cargado=0;
	if((tab!=NULL)&&(c>=0)&&(c<COLUMNA)&&((color==COLOR1)||(color==COLOR2)))
	{
		char f;
		for(f=FILA-1;f>=0;f--)
		{
			if(tab->ranura[f][c]->estado==LIBRE)
			{
				cargado=1;
				Tposicion pos=crearPosicion(f,c);
				cargarRanura(tab->ranura[f][c], color, pos);
				tab->cantFichas++;
				break;
			}
		}
	}
	return cargado;
}
